//
//  UserAccountViewModel.swift
//  weibo1
//
//  Created by nick on 15/9/28.
//  Copyright © 2015年 nick. All rights reserved.
//

import UIKit

class UserAccountViewModel {
    
    /// 单例
    static let userAccountViewModel = UserAccountViewModel()
    /// 用户模型
    var userAccount: UserAccount?
    /// 用户是否登录
    var userLogon: Bool {
        return userAccount != nil
    }
    /// 用户信息保存路径
    var path: String {
        var filePath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
        filePath = (filePath as NSString).stringByAppendingPathComponent("userAccornt.plist")
        return filePath
    }
    
    init() {
        userAccount = NSKeyedUnarchiver.unarchiveObjectWithFile(path) as? UserAccount
        if let date = userAccount?.expiresDate {
            // 执行到此，日期一定存在
            // compare 可以比较非常多的 NS 对象
            if date.compare(NSDate()) != NSComparisonResult.OrderedDescending {
                userAccount = nil
            }
        }
    }
    // MARK: - 网络访问方法
    /**
    1.  新建方法
    2.  复制代码
    3.  修改参数和返回值
    4.  如果有子函数，移动子函数的位置
    5.  测试
    */
    
    func loadAccessToken(code: String, finished: (error: NSError?)->()) {
        
        NetworkTools.shareInstance.loadAccessToken(code, finished: { (result, error) -> () in
            // 如果出错返回
            if error != nil {
                return
            }
            // 请求成功，保存用户信息
            //                print(request)
            //                print(result)
            let account = UserAccount(dict: result as! [String : AnyObject])
            // 将 account 对象保存在属性中
            self.userAccount = account
//            print(account)
            
            self.loadUserInfo(account, finished: finished)
        })
    }
    private func loadUserInfo(account: UserAccount, finished: (error: NSError?)->()) {
        
        NetworkTools.shareInstance.loadUserInfo(account.uid!, accessToken: account.access_token!) { (result, error) -> () in
            if error != nil {
                print("加载用户信息出错\(error)")
                return
            }
            //            print(result)
            // 保存部分用户信息
            guard let dict = result as? [String: AnyObject] else {
                print("数据格式错误")
                finished(error: NSError(domain: "cn.itcast.error", code: -1001, userInfo: ["message":"数据格式错误"]))
                return
            }
            // 设置用户信息
            account.screen_name = dict["screen_name"] as? String
            account.avatar_large = dict["avatar_large"] as? String
            // 保存用户信息
            account.saveUserAccount()
//            print(account)
            finished(error: nil)
            
        }
        
        
    }
}
